但愿人长久,搬砖不再有
本文作者
作者:Android轮子哥
链接:
https://www.jianshu.com/p/77dd326f21dc
本文由作者授权发布。
一次意外的水群,看到作者在群里介绍他的新项目,了解一下,特意请求作者写了篇文章。
本文的意义并不是让大家使用这样的一个开源库,而且希望大家可以借鉴作者项目,结合自己多年的开发经验,可以做同样的事情,提成开发效率,节省时间,就可以多上wanandroid 学习了。
在做过了N个公司项目开发的时候,我常常在怀疑人生,为什么大部分时间都浪费在搬砖的事情上,每开始一个新项目这个念头更是涌上心头,终于在经历了那么多项目开发后,我做出了一件常人都不太愿意去做的事:
搭架构和做模板
经过对每个做过的项目进行分析,把其中的共同点抽取并且分离开来,历时一个多月,经过不断地修改,不断地修改,不断地修改......
在今天,正式开源了,这个项目几乎适用于任何新项目的开发,可以帮你节省很多时间和精力,同时能让你避开常见的坑 ,规范和统一新项目的代码,避免了开发代码混乱的问题
我相信这个项目会造福很多人,特别是和我一样做外包项目的开发者,你们将解放你们的双手。
https://github.com/getActivity/AndroidProject
APP用户体验:已经集成界面侧滑以及状态栏沉浸框架
必备优秀框架:危险权限处理,标题栏控件,吐司工具类,圆形ImageView
常用页面模板:启动界面,主页界面,登录界面,注册界面,关于界面,浏览器界面
集成友盟统计:集成友盟统计,并且加入了友盟多渠道打包,在发布release包时可选择渠道包
界面样式规范:项目的严格按照 Material Design 设计进行配色,统一和规范Button和EditText控件样式
常用自定义View:圆形ImageView,验证码点击倒计时View,带清除按钮的EditText,正方形的FrameLayout、LinearLayout、RelativeLayout、ImageView
代码注释规范:代码严格按照谷歌级规范来做,如需寻找友盟相关的代码,全局搜索 "友盟" 即可,任何一处不关于原生的 API 都有非常完善的注释
修复 Button 在Android 5.1 之后英文字符串自动大写的问题
修复 Button 在设置状态选择器后仍然残留按压阴影的问题
修复某些低配置机型启动页停留在白屏的时间比较长的问题
修复某些机型在 WebView 长按时布局被顶下来的问题
修复 任务栈中 首页Activity 被重复启动的问题
修正 Android 9.0 限制 Http 明文请求的问题
这些问题已经在模板项目中已经被修复好了,具体修复过程如下
修复 Button 在Android 5.1 之后英文字符串自动大写的问题
给 Button 添加如下属性即可,模板工程已经把该属性封装到Style中,直接引用style="@style/ButtonStyle"即可
android:textAllCaps="false"
修复 Button 在设置状态选择器后仍然残留按压阴影的问题
给 Button 设置样式如下即可,模板工程已经把该属性封装到Style中,直接引用style="@style/ButtonStyle"即可
style="Widget.AppCompat.Button.Borderless"
修复某些低配置机型启动页停留在白屏的时间比较长的问题
某些低配置机型上出现该问题比较明显,如果配置好的机型则看不出来,添加一个透明的Activity主题样式
<!-- 解决启动页白屏的问题 -->
<style name="LauncherTheme" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
在清单文件中给启动页的Activity设置主题样式
<!-- 启动页面(因为使用了LauncherTheme,所以不要给这个Activity设置screenOrientation属性,会导致崩溃) -->
<activity
android:name=".ui.activity.LauncherActivity"
android:theme="@style/LauncherTheme">
<!-- 程序入口 -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
还有一点需要特别注意,Android 8.0 及之后不允许透明主题的Activity设置屏幕方向,所以请不要给Activity设置该属性,否则会导致崩溃
修复某些机型在 WebView 长按时布局被顶下来的问题
这个问题在只要界面有 WebView 的情况才会发生,在 Android 5.1 经过测试,在 WebView 中长按选择复制文字时,会显示一个类似于 Actionbar 的控件,但是这个东西叫做ActionMode,会将当前 Activity 所在布局顶下去,这时会和我们项目中的标题栏出现冲突,类似于一个界面同时出现了两个标题栏的效果。
解决的方法很简单,就是让出现的 ActionMode 悬浮在 Activity上,这样就把项目中的标题栏遮挡住了,不会出现那种类似一个界面出现两种标题栏的效果,当 WebView 取消长按复制文字后,ActionMode也会随之消失
如何让 ActionMode 悬浮在 Activity 上呢?
其实很简单,在 Application 主题中加入以下属性
<!-- ActionMode覆盖Actionbar,不顶下来 -->
<item name="windowActionModeOverlay">true</item>
<item name="android:windowContentOverlay">@null</item>
<!-- ActionMode的颜色 -->
<item name="actionModeBackground">@color/colorPrimary</item>
修复 任务栈中 首页Activity 被重复启动的问题
这个问题导致是因为LauncherActivity作为APP的第一个界面,销毁后没有保存任务栈的状态,导致我们在桌面上启动的时候系统误认为当前启动LauncherActivity的任务栈已经被销毁,所以重新创建了新的任务栈并且跳转到LauncherActivity,最终导致用户从桌面点击APP图标时,总是跳转到LauncherActivity而不是HomeActivity
<!-- 主页界面 -->
<activity
android:name=".ui.activity.HomeActivity"
android:alwaysRetainTaskState="true"
android:launchMode="singleTop" />
修复 Android P 限制 Http 明文请求的问题
Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。 如果当前应用的请求是 htttp 请求,而非 https ,这样就会导系统禁止当前应用进行该请求,如果 WebView 的 url 用 http 协议,同样会出现加载失败,https 不受影响。
在 res 下新建一个 xml 目录,然后创建一个名为:network_security_config.xml 文件 ,该文件内容如下
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后在 AndroidManifest.xml application 标签内应用上面的xml配置
<application
android:name=".App"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme" />
点击此处下载APP进行体验
集成框架
权限请求框架:https://github.com/getActivity/XXPermissions
标题栏:https://github.com/getActivity/TitleBar
吐司工具类:https://github.com/getActivity/ToastUtils
状态栏沉浸:https://github.com/gyf-dev/ImmersionBar
界面侧滑功能:https://github.com/bingoogolapple/BGASwipeBackLayout-Android
圆形ImageView:https://github.com/hdodenhof/CircleImageView
ButterKnife注解:https://github.com/JakeWharton/butterknife
项目地址:
https://github.com/getActivity/AndroidProject
我觉得每个人都可以做这样的事情,结合自己多年的经验,修复常见的问题,抽取各种基类,解耦的方式集成常用第三方库,做事件总线、组件化、打包脚本等,然后不带的迭代补充与完善...
下面有一些设计方面的文章也可以帮助你完成上述的事情:
优雅地实现Android主流图片加载框架封装,可无侵入切换框架
从BaseActivity与BaseFragment的封装谈起
Android 快速开发(一),封装一个 TopBarBaseActivity
Android 快速开发(二),封装一个 BottomTabBaseActivity
我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
扫一扫 关注我的公众号
如果你想要跟大家分享你的文章,欢迎投稿~
┏(^0^)┛明天见!